home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume19 / freeze / patch02 next >
Encoding:
Text File  |  1991-05-19  |  13.9 KB  |  570 lines

  1. Newsgroups: comp.sources.misc
  2. From: Leonid A. Broukhis <leo@s514.ipmce.su>
  3. Subject:  v19i087:  freeze - Freeze/Melt compression package, Patch02
  4. Message-ID: <1991May17.201119.367@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 19aff6932dedabad7696155095a6ab73
  6. Date: Fri, 17 May 1991 20:11:19 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Leonid A. Broukhis <leo@s514.ipmce.su>
  10. Posting-number: Volume 19, Issue 87
  11. Archive-name: freeze/patch02
  12. Patch-To: freeze: Volume 17, Issue 67-68
  13.  
  14. *** ../distribution/bitio.c    Wed Mar 27 19:44:42 1991
  15. --- bitio.c    Mon May  6 21:52:47 1991
  16. ***************
  17. *** 76,82 ****
  18.       register u_short b = putbuf;
  19.       b |= c >> len;
  20.       if ((len += l) >= 8) {
  21. !         if (putchar ((int)(b >> 8)) == EOF) writeerr();
  22.           if ((len -= 8) >= 8) {
  23.               putchar ((int)b);
  24.               bytes_out += 2;
  25. --- 76,82 ----
  26.       register u_short b = putbuf;
  27.       b |= c >> len;
  28.       if ((len += l) >= 8) {
  29. !         putchar ((int)(b >> 8));
  30.           if ((len -= 8) >= 8) {
  31.               putchar ((int)b);
  32.               bytes_out += 2;
  33. ***************
  34. *** 87,92 ****
  35. --- 87,94 ----
  36.               bytes_out++;
  37.           }
  38.       }
  39. +     if (ferror(stdout))
  40. +         writeerr();
  41.       putbuf = b;
  42.       putlen = len;
  43.   }
  44. *** ../distribution/decode.c    Wed Mar 27 19:45:02 1991
  45. --- decode.c    Mon May 13 15:23:12 1991
  46. ***************
  47. *** 52,58 ****
  48.           }
  49.   
  50.           if (!quiet && (in_count > indicator_count)) {
  51. !             fprintf(stderr, "%5dK\b\b\b\b\b\b", in_count / 1024);
  52.               fflush (stderr);
  53.               indicator_count += indicator_threshold;
  54.               indicator_threshold += 1024;
  55. --- 52,60 ----
  56.           }
  57.   
  58.           if (!quiet && (in_count > indicator_count)) {
  59. !             if (ferror(stdout))
  60. !                 writeerr();
  61. !             fprintf(stderr, "%5ldK\b\b\b\b\b\b", in_count / 1024);
  62.               fflush (stderr);
  63.               indicator_count += indicator_threshold;
  64.               indicator_threshold += 1024;
  65. *** ../distribution/encode.c    Mon May 13 15:12:04 1991
  66. --- encode.c    Sun May 12 14:15:03 1991
  67. ***************
  68. *** 113,119 ****
  69.   
  70.           in_count += i;
  71.           if ((in_count > indicator_count) && !quiet) {
  72. !             fprintf(stderr, "%5dK\b\b\b\b\b\b", in_count / 1024);
  73.               fflush (stderr);
  74.               indicator_count += indicator_threshold;
  75.               indicator_threshold += 1024;
  76. --- 113,119 ----
  77.   
  78.           in_count += i;
  79.           if ((in_count > indicator_count) && !quiet) {
  80. !             fprintf(stderr, "%5ldK\b\b\b\b\b\b", in_count / 1024);
  81.               fflush (stderr);
  82.               indicator_count += indicator_threshold;
  83.               indicator_threshold += 1024;
  84. *** ../distribution/freeze.c    Mon May 13 15:12:07 1991
  85. --- freeze.c    Mon May 13 15:15:31 1991
  86. ***************
  87. *** 33,39 ****
  88.   uchar magic_header[] = { "\037\237" };      /* 1F 9F = freeze 1.X + 1 */
  89.   #endif
  90.   
  91. ! static char ident[] = "@(#) freeze.c 2.2.%d Alpha 3/27/91 leo@s514.ipmce.su\n";
  92.   
  93.   #define ARGVAL() (*++(*argv) || (--argc && *++argv))
  94.   
  95. --- 33,39 ----
  96.   uchar magic_header[] = { "\037\237" };      /* 1F 9F = freeze 1.X + 1 */
  97.   #endif
  98.   
  99. ! static char ident[] = "@(#) freeze.c 2.2.%d Alpha 5/13/91 leo@s514.ipmce.su\n";
  100.   
  101.   #define ARGVAL() (*++(*argv) || (--argc && *++argv))
  102.   
  103. ***************
  104. *** 43,49 ****
  105.   #ifdef DEBUG
  106.   
  107.   # ifdef MSDOS
  108. !     fprintf(stderr,"Usage: freeze [-cdDfivV] [file | +type ...]\n");
  109.   # else
  110.       fprintf(stderr,"Usage: freeze [-cdDfvV] [file | +type ...]\n");
  111.   # endif /* MSDOS */
  112. --- 43,49 ----
  113.   #ifdef DEBUG
  114.   
  115.   # ifdef MSDOS
  116. !     fprintf(stderr,"Usage: freeze [-cdDfitvV] [file | +type ...]\n");
  117.   # else
  118.       fprintf(stderr,"Usage: freeze [-cdDfvV] [file | +type ...]\n");
  119.   # endif /* MSDOS */
  120. ***************
  121. *** 51,57 ****
  122.   #else
  123.   
  124.   # ifdef MSDOS
  125. !     fprintf(stderr,"Usage: freeze [-cdfivV] [file | +type ...]\n");
  126.   # else
  127.       fprintf(stderr,"Usage: freeze [-cdfvV] [file | +type ...]\n");
  128.   # endif /* MSDOS */
  129. --- 51,57 ----
  130.   #else
  131.   
  132.   # ifdef MSDOS
  133. !     fprintf(stderr,"Usage: freeze [-cdfitvV] [file | +type ...]\n");
  134.   # else
  135.       fprintf(stderr,"Usage: freeze [-cdfvV] [file | +type ...]\n");
  136.   # endif /* MSDOS */
  137. ***************
  138. *** 71,81 ****
  139.   char ofname [100];
  140.   
  141.   #ifdef MSDOS
  142. ! # define PATH_SEP '\\'
  143. ! short image = 2;          /* 1 <=> image (binary) mode; 2 <=> text mode */
  144.   #else
  145.   char deffile[] = "/etc/default/freeze";
  146. - # define PATH_SEP '/'
  147.   #endif
  148.   
  149.   #ifdef DEBUG
  150. --- 71,85 ----
  151.   char ofname [100];
  152.   
  153.   #ifdef MSDOS
  154. !    char *last_sep();    /* last slash, backslash, or colon */
  155. ! # ifdef BIN_DEFAULT
  156. !     short image = O_BINARY;
  157. ! # else
  158. !     short image = O_TEXT;
  159. ! # endif
  160.   #else
  161. + #  define last_sep(s) rindex((s), '/')    /* Unix always uses slashes */
  162.   char deffile[] = "/etc/default/freeze";
  163.   #endif
  164.   
  165.   #ifdef DEBUG
  166. ***************
  167. *** 116,122 ****
  168.    *            conversion between UNIX text representation (LF line
  169.    *          termination) in frozen form and MS-DOS text
  170.    *          representation (CR-LF line termination) in melted
  171. !  *            form.  Useful with non-text files.
  172.    *
  173.    *      -v:             Write freezing statistics
  174.    *
  175. --- 120,133 ----
  176.    *            conversion between UNIX text representation (LF line
  177.    *          termination) in frozen form and MS-DOS text
  178.    *          representation (CR-LF line termination) in melted
  179. !  *            form.  Useful with non-text files.  Default if
  180. !  *          BIN_DEFAULT specified.
  181. !  *
  182. !  *    -b:       Binary mode.  Synonym for -i.  MS-DOS only.
  183. !  *
  184. !  *    -t:       Text mode (defined only under MS-DOS).  Treat file
  185. !  *           as text (CR-LF and ^Z special) in melted form.  Default
  186. !  *           unless BIN_DEFAULT specified.
  187.    *
  188.    *      -v:             Write freezing statistics
  189.    *
  190. ***************
  191. *** 185,191 ****
  192.       filelist = fileptr = (char **)(malloc(argc * sizeof(*argv)));
  193.       *filelist = NULL;
  194.   
  195. !     if((cp = rindex(argv[0], PATH_SEP)) != 0) {
  196.       cp++;
  197.       } else {
  198.       cp = argv[0];
  199. --- 196,202 ----
  200.       filelist = fileptr = (char **)(malloc(argc * sizeof(*argv)));
  201.       *filelist = NULL;
  202.   
  203. !     if((cp = last_sep(argv[0])) != 0) {
  204.       cp++;
  205.       } else {
  206.       cp = argv[0];
  207. ***************
  208. *** 192,198 ****
  209.       }
  210.   
  211.   #ifdef MSDOS
  212. !     if(strcmp(cp, "MELT.EXE") == 0) {
  213.   #else
  214.       if(strcmp(cp, "melt") == 0) {
  215.   #endif
  216. --- 203,210 ----
  217.       }
  218.   
  219.   #ifdef MSDOS
  220. !         /* use case-insensitive match: parent may not be command.com */
  221. !     if(stricmp(cp, "melt.exe") == 0) {
  222.   #else
  223.       if(strcmp(cp, "melt") == 0) {
  224.   #endif
  225. ***************
  226. *** 200,206 ****
  227.       do_melt = 1;
  228.       
  229.   #ifdef MSDOS
  230. !     } else if(strcmp(cp, "FCAT.EXE") == 0) {
  231.   #else
  232.       } else if(strcmp(cp, "fcat") == 0) {
  233.   #endif
  234. --- 212,219 ----
  235.       do_melt = 1;
  236.       
  237.   #ifdef MSDOS
  238. !         /* use case-insensitive match: parent may not be command.com */
  239. !     } else if(stricmp(cp, "fcat.exe") == 0) {
  240.   #else
  241.       } else if(strcmp(cp, "fcat") == 0) {
  242.   #endif
  243. ***************
  244. *** 253,260 ****
  245.               break;
  246.   #ifdef MSDOS
  247.               case 'i':
  248. !             image = 1;
  249.               break;
  250.   #endif
  251.   
  252.               case 'v':
  253. --- 266,278 ----
  254.               break;
  255.   #ifdef MSDOS
  256.               case 'i':
  257. !             case 'b':
  258. !             image = O_BINARY;    /* binary (aka image) mode */
  259.               break;
  260. +             case 't':            /* text mode */
  261. +             image = O_TEXT;
  262. +             break;
  263.   #endif
  264.   
  265.               case 'v':
  266. ***************
  267. *** 384,390 ****
  268.           /* Open input file for freezing */
  269.   
  270.   #ifdef MSDOS
  271. !         if ((freopen(*fileptr, image == 2 ? "rt" : "rb", stdin))
  272.               == NULL)
  273.   #else
  274.           if ((freopen(*fileptr, "r", stdin)) == NULL)
  275. --- 402,408 ----
  276.           /* Open input file for freezing */
  277.   
  278.   #ifdef MSDOS
  279. !         if ((freopen(*fileptr, image == O_TEXT ? "rt" : "rb", stdin))
  280.               == NULL)
  281.   #else
  282.           if ((freopen(*fileptr, "r", stdin)) == NULL)
  283. ***************
  284. *** 397,403 ****
  285.           /* Generate output filename */
  286.           strcpy(ofname, *fileptr);
  287.   #ifndef BSD4_2        /* Short filenames */
  288. !         if ((cp = rindex(ofname, PATH_SEP)) != NULL) cp++;
  289.           else                    cp = ofname;
  290.   # ifdef MSDOS
  291.           if (topipe == 0 && (sufp = rindex(cp, '.')) != NULL &&
  292. --- 415,421 ----
  293.           /* Generate output filename */
  294.           strcpy(ofname, *fileptr);
  295.   #ifndef BSD4_2        /* Short filenames */
  296. !         if ((cp = last_sep(ofname)) != NULL) cp++;
  297.           else                    cp = ofname;
  298.   # ifdef MSDOS
  299.           if (topipe == 0 && (sufp = rindex(cp, '.')) != NULL &&
  300. ***************
  301. *** 457,463 ****
  302.           if (do_melt == 0 || debug == 0) {
  303.   #endif
  304.   #ifdef MSDOS
  305. !         if (freopen(ofname, do_melt && image == 2 ? "wt" : "wb",
  306.               stdout) == NULL)
  307.   #else         
  308.           if (freopen(ofname, "w", stdout) == NULL)
  309. --- 475,481 ----
  310.           if (do_melt == 0 || debug == 0) {
  311.   #endif
  312.   #ifdef MSDOS
  313. !         if (freopen(ofname, do_melt && image == O_TEXT ? "wt" : "wb",
  314.               stdout) == NULL)
  315.   #else         
  316.           if (freopen(ofname, "w", stdout) == NULL)
  317. ***************
  318. *** 474,479 ****
  319. --- 492,506 ----
  320.               indicator_count = 1024;
  321.           }
  322.           }
  323. +         else {    /* output is to stdout */
  324. + #ifdef MSDOS
  325. +             /* freeze output always binary; melt output
  326. +                is binary if image == O_BINARY
  327. +             */
  328. +         if (do_melt == 0 || image == O_BINARY)
  329. +             setmode(fileno(stdout), O_BINARY);
  330. + #endif
  331. +         }
  332.           /* Actually do the freezing/melting */
  333.           if (do_melt == 0)
  334.           freeze();
  335. ***************
  336. *** 493,498 ****
  337. --- 520,531 ----
  338.   Pipe:
  339.       topipe = 1;
  340.       if (do_melt == 0) {
  341. + #ifdef MSDOS
  342. +             /* freeze output always binary */
  343. +             /* freeze input controlled by -i -t -b switches */
  344. +         setmode(fileno(stdout), O_BINARY);
  345. +         setmode(fileno(stdin), image);
  346. + #endif
  347.   #ifdef COMPAT
  348.           new_flg = 1;
  349.   #endif
  350. ***************
  351. *** 500,505 ****
  352. --- 533,544 ----
  353.           if(!quiet)
  354.               putc('\n', stderr);
  355.       } else {
  356. + #ifdef MSDOS
  357. +             /* melt input always binary */
  358. +             /* melt output to stdout binary if so requested */
  359. +         setmode(fileno(stdin), O_BINARY);
  360. +         setmode(fileno(stdout), image);
  361. + #endif
  362.           /* Check the magic number */
  363.           if ((getchar() != magic_header[0])
  364.   #ifdef COMPAT
  365. ***************
  366. *** 566,573 ****
  367.   
  368.   writeerr()
  369.   {
  370. !     perror ( ofname );
  371. !     unlink ( ofname );
  372.       exit ( 1 );
  373.   }
  374.   
  375. --- 605,614 ----
  376.   
  377.   writeerr()
  378.   {
  379. !     if (!topipe) {
  380. !     perror ( ofname );
  381. !     unlink ( ofname );
  382. !     }
  383.       exit ( 1 );
  384.   }
  385.   
  386. ***************
  387. *** 713,718 ****
  388. --- 754,763 ----
  389.           Table[5], Table[6], Table[7], Table[8]);
  390.       fprintf(stderr, "HUFFMAN: %ld (max frequency)\n", (long)MAX_FREQ);
  391.       fprintf(stderr, "HASH: %d bits\n", BITS);
  392. + #ifdef MSDOS
  393. +     fprintf(stderr, "Default melted mode: %s\n",
  394. +             image == O_BINARY ? "binary" : "text");
  395. + #endif
  396.       exit(0);
  397.   }
  398.   
  399. ***************
  400. *** 759,761 ****
  401. --- 804,826 ----
  402.           fprintf(stderr, "Using \"%s%s\" type\n", type, t);
  403.       }
  404.   }
  405. + #ifdef MSDOS
  406. +     /* MSDOS typically has ':' and '\\' separators, but some command
  407. +           processors (and the int 21h function handler) support '/' too.
  408. +           Find the last of these.
  409. +     */
  410. + char *
  411. + last_sep(s)
  412. + register char *s;
  413. + {
  414. +     register char *c;
  415. +     char *p;
  416. +     for (p = NULL; *s; s++)
  417. +         if (*s == '/' || *s == '\\' || *s == ':')
  418. +         p = s;
  419. +     return(p);
  420. + }
  421. + #endif    /* MSDOS */
  422. *** ../distribution/freeze.h    Mon May 13 15:12:08 1991
  423. --- freeze.h    Sun Mar 31 12:25:52 1991
  424. ***************
  425. *** 4,12 ****
  426.   #ifdef SUN4
  427.   #include <sys/stdtypes.h>
  428.   #else
  429. - #if !defined(ultrix) && defined(__GNUC__)
  430. -   typedef int mode_t; /* for GCC */
  431. - #endif
  432.   # ifndef getc
  433.   #   define getc(p)         (--(p)->_cnt < 0 ? _filbuf(p) : (int) *(p)->_ptr++)
  434.   # endif
  435. --- 4,9 ----
  436. ***************
  437. *** 36,41 ****
  438. --- 33,39 ----
  439.   
  440.   #ifdef MSDOS
  441.   #include <stdlib.h>
  442. + #include <fcntl.h>
  443.   #endif
  444.   
  445.   typedef unsigned char uchar;
  446. *** ../distribution/huf.c    Wed Mar 27 19:44:46 1991
  447. --- huf.c    Mon May 13 13:23:35 1991
  448. ***************
  449. *** 221,226 ****
  450. --- 221,228 ----
  451.       if (putlen) {
  452.           putchar((int)(putbuf >> 8));
  453.           bytes_out++;
  454. +         if (ferror(stdout))
  455. +             writeerr();
  456.       }
  457.   }
  458.   
  459. ***************
  460. *** 400,410 ****
  461.       putchar((int)(i & 0xFF));
  462.       putchar((int)((i >> 8) & 0x7F));
  463.       putchar((int)(Table[6] & 0x3F));
  464.   }
  465.   
  466.   read_header() {
  467.       short i, j;
  468. !     i = getchar() | (getchar() << 8);
  469.       Table[1] = i & 1; i >>= 1;
  470.       Table[2] = i & 3; i >>= 2;
  471.       Table[3] = i & 7; i >>= 3;
  472. --- 402,415 ----
  473.       putchar((int)(i & 0xFF));
  474.       putchar((int)((i >> 8) & 0x7F));
  475.       putchar((int)(Table[6] & 0x3F));
  476. +     if (ferror(stdout))
  477. +         writeerr();
  478.   }
  479.   
  480.   read_header() {
  481.       short i, j;
  482. !     i = getchar() & 0xFF;
  483. !       i |= (getchar() & 0xFF) << 8;
  484.       Table[1] = i & 1; i >>= 1;
  485.       Table[2] = i & 3; i >>= 2;
  486.       Table[3] = i & 7; i >>= 3;
  487. *** ../distribution/lz.h    Mon May 13 15:12:10 1991
  488. --- lz.h    Sun May 12 14:15:03 1991
  489. ***************
  490. *** 49,55 ****
  491.   #else
  492.   #    if parts == 3
  493.   extern u_short next0[], next1[], next2[];
  494. ! #    else
  495.   #        if parts == 5
  496.   extern u_short next0[], next1[], next2[], next3[], next4[];
  497.   #        else
  498. --- 49,55 ----
  499.   #else
  500.   #    if parts == 3
  501.   extern u_short next0[], next1[], next2[];
  502. ! #       else
  503.   #        if parts == 5
  504.   extern u_short next0[], next1[], next2[], next3[], next4[];
  505.   #        else
  506. ***************
  507. *** 71,77 ****
  508.   
  509.   #define InsertNode(r)\
  510.   {\
  511. !     register hash_t p, first_son;\
  512.       register uchar  *key;\
  513.       key = &text_buf[r];\
  514.       p = N + 1 + (key[0] & MASK0) |\
  515. --- 71,77 ----
  516.   
  517.   #define InsertNode(r)\
  518.   {\
  519. !     register hash_t p; register u_short first_son;\
  520.       register uchar  *key;\
  521.       key = &text_buf[r];\
  522.       p = N + 1 + (key[0] & MASK0) |\
  523. *** ../distribution/makefile    Mon May 13 15:12:10 1991
  524. --- makefile    Fri May 10 19:40:42 1991
  525. ***************
  526. *** 9,17 ****
  527.   
  528.   CC            = gcc 
  529.   
  530. ! CFLAGS        = -DBITS=18 -O -DCOMPAT #-DBSD42 -DSUN4
  531.   
  532. ! LINTFLAGS     = -DBITS=15 -DCOMPAT -DDEBUG -DGATHER_STAT
  533.   
  534.   MAKEFILE      = makefile
  535.   
  536. --- 9,17 ----
  537.   
  538.   CC            = gcc 
  539.   
  540. ! CFLAGS        = -DBITS=18 -O -DCOMPAT -fstrength-reduce #-DBSD42 -DSUN4
  541.   
  542. ! LINTFLAGS     = -DBITS=15 -DCOMPAT -DDEBUG -DGATHER_STAT -x
  543.   
  544.   MAKEFILE      = makefile
  545.   
  546. *** ../distribution/patchlevel.h    Mon May 13 15:12:11 1991
  547. --- patchlevel.h    Fri Mar 29 12:18:11 1991
  548. ***************
  549. *** 1 ****
  550. ! #define PATCHLEVEL 1
  551. --- 1 ----
  552. ! #define PATCHLEVEL 2
  553.  
  554. -- 
  555. Leonid A. Broukhis | 89-1-95 Liberty St. | "BROUKHIS" is Hebrew for
  556. 7+095 494.6241 (h) | Moscow 123481 USSR  |       "BENEDICTAE"
  557. 7+095 132.9475 (o) | (leo@s514.ipmce.su) | {Licet omnia qualibet dicas}
  558.  
  559.  
  560. exit 0 # Just in case...
  561. -- 
  562. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  563. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  564. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  565. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  566.